SKK
***

This is Edition 1.2, last updated Feb 26 1997, of `The SKK Manual', for
SKK, Version 9.6.

Copyright (C) 1996 1991, 1992, 1993, 1994, 1996, 1997 Masahiko Sato,
Yukiyoshi Kameyama and Mikio Nakajima.  Revised by Kiyotaka Sakai and
Satoshi Harauchi.

Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
sections entitled "Copying" and "GNU General Public License" are
included exactly as in the original, and provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation
approved by the Free Software Foundation.

GNU GENERAL PUBLIC LICENSE
**************************
                          Version 2, June 1991

     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
     675 Mass Ave, Cambridge, MA 02139, USA

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

Preamble
========

  The licenses for most software are designed to take away your freedom
to share and change it.  By contrast, the GNU General Public License is
intended to guarantee your freedom to share and change free software--to
make sure the software is free for all its users.  This General Public
License applies to most of the Free Software Foundation's software and
to any other program whose authors commit to using it.  (Some other Free
Software Foundation software is covered by the GNU Library General
Public License instead.)  You can apply it to your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it if
you want it, that you can change the software or use pieces of it in new
free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  1. This License applies to any program or other work which contains a
     notice placed by the copyright holder saying it may be distributed
     under the terms of this General Public License.  The "Program",
     below, refers to any such program or work, and a "work based on the
     Program" means either the Program or any derivative work under
     copyright law: that is to say, a work containing the Program or a
     portion of it, either verbatim or with modifications and/or
     translated into another language.  (Hereinafter, translation is
     included without limitation in the term "modification".)  Each
     licensee is addressed as "you".

     Activities other than copying, distribution and modification are
     not covered by this License; they are outside its scope.  The act
     of running the Program is not restricted, and the output from the
     Program is covered only if its contents constitute a work based on
     the Program (independent of having been made by running the
     Program).  Whether that is true depends on what the Program does.

  2. You may copy and distribute verbatim copies of the Program's source
     code as you receive it, in any medium, provided that you
     conspicuously and appropriately publish on each copy an appropriate
     copyright notice and disclaimer of warranty; keep intact all the
     notices that refer to this License and to the absence of any
     warranty; and give any other recipients of the Program a copy of
     this License along with the Program.

     You may charge a fee for the physical act of transferring a copy,
     and you may at your option offer warranty protection in exchange
     for a fee.

  3. You may modify your copy or copies of the Program or any portion of
     it, thus forming a work based on the Program, and copy and
     distribute such modifications or work under the terms of Section 1
     above, provided that you also meet all of these conditions:

       a. You must cause the modified files to carry prominent notices
          stating that you changed the files and the date of any change.

       b. You must cause any work that you distribute or publish, that
          in whole or in part contains or is derived from the Program or
          any part thereof, to be licensed as a whole at no charge to
          all third parties under the terms of this License.

       c. If the modified program normally reads commands interactively
          when run, you must cause it, when started running for such
          interactive use in the most ordinary way, to print or display
          an announcement including an appropriate copyright notice and
          a notice that there is no warranty (or else, saying that you
          provide a warranty) and that users may redistribute the
          program under these conditions, and telling the user how to
          view a copy of this License.  (Exception: if the Program
          itself is interactive but does not normally print such an
          announcement, your work based on the Program is not required
          to print an announcement.)

     These requirements apply to the modified work as a whole.  If
     identifiable sections of that work are not derived from the
     Program, and can be reasonably considered independent and separate
     works in themselves, then this License, and its terms, do not apply
     to those sections when you distribute them as separate works.  But
     when you distribute the same sections as part of a whole which is a
     work based on the Program, the distribution of the whole must be on
     the terms of this License, whose permissions for other licensees
     extend to the entire whole, and thus to each and every part
     regardless of who wrote it.

     Thus, it is not the intent of this section to claim rights or
     contest your rights to work written entirely by you; rather, the
     intent is to exercise the right to control the distribution of
     derivative or collective works based on the Program.

     In addition, mere aggregation of another work not based on the
     Program with the Program (or with a work based on the Program) on a
     volume of a storage or distribution medium does not bring the other
     work under the scope of this License.

  4. You may copy and distribute the Program (or a work based on it,
     under Section 2) in object code or executable form under the terms
     of Sections 1 and 2 above provided that you also do one of the
     following:

       a. Accompany it with the complete corresponding machine-readable
          source code, which must be distributed under the terms of
          Sections 1 and 2 above on a medium customarily used for
          software interchange; or,

       b. Accompany it with a written offer, valid for at least three
          years, to give any third party, for a charge no more than your
          cost of physically performing source distribution, a complete
          machine-readable copy of the corresponding source code, to be
          distributed under the terms of Sections 1 and 2 above on a
          medium customarily used for software interchange; or,

       c. Accompany it with the information you received as to the offer
          to distribute corresponding source code.  (This alternative is
          allowed only for noncommercial distribution and only if you
          received the program in object code or executable form with
          such an offer, in accord with Subsection b above.)

     The source code for a work means the preferred form of the work for
     making modifications to it.  For an executable work, complete
     source code means all the source code for all modules it contains,
     plus any associated interface definition files, plus the scripts
     used to control compilation and installation of the executable.
     However, as a special exception, the source code distributed need
     not include anything that is normally distributed (in either source
     or binary form) with the major components (compiler, kernel, and so
     on) of the operating system on which the executable runs, unless
     that component itself accompanies the executable.

     If distribution of executable or object code is made by offering
     access to copy from a designated place, then offering equivalent
     access to copy the source code from the same place counts as
     distribution of the source code, even though third parties are not
     compelled to copy the source along with the object code.

  5. You may not copy, modify, sublicense, or distribute the Program
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense or distribute the Program is
     void, and will automatically terminate your rights under this
     License.  However, parties who have received copies, or rights,
     from you under this License will not have their licenses terminated
     so long as such parties remain in full compliance.

  6. You are not required to accept this License, since you have not
     signed it.  However, nothing else grants you permission to modify
     or distribute the Program or its derivative works.  These actions
     are prohibited by law if you do not accept this License.
     Therefore, by modifying or distributing the Program (or any work
     based on the Program), you indicate your acceptance of this License
     to do so, and all its terms and conditions for copying,
     distributing or modifying the Program or works based on it.

  7. Each time you redistribute the Program (or any work based on the
     Program), the recipient automatically receives a license from the
     original licensor to copy, distribute or modify the Program subject
     to these terms and conditions.  You may not impose any further
     restrictions on the recipients' exercise of the rights granted
     herein.  You are not responsible for enforcing compliance by third
     parties to this License.

  8. If, as a consequence of a court judgment or allegation of patent
     infringement or for any other reason (not limited to patent
     issues), conditions are imposed on you (whether by court order,
     agreement or otherwise) that contradict the conditions of this
     License, they do not excuse you from the conditions of this
     License.  If you cannot distribute so as to satisfy simultaneously
     your obligations under this License and any other pertinent
     obligations, then as a consequence you may not distribute the
     Program at all.  For example, if a patent license would not permit
     royalty-free redistribution of the Program by all those who receive
     copies directly or indirectly through you, then the only way you
     could satisfy both it and this License would be to refrain entirely
     from distribution of the Program.

     If any portion of this section is held invalid or unenforceable
     under any particular circumstance, the balance of the section is
     intended to apply and the section as a whole is intended to apply
     in other circumstances.

     It is not the purpose of this section to induce you to infringe any
     patents or other property right claims or to contest validity of
     any such claims; this section has the sole purpose of protecting
     the integrity of the free software distribution system, which is
     implemented by public license practices.  Many people have made
     generous contributions to the wide range of software distributed
     through that system in reliance on consistent application of that
     system; it is up to the author/donor to decide if he or she is
     willing to distribute software through any other system and a
     licensee cannot impose that choice.

     This section is intended to make thoroughly clear what is believed
     to be a consequence of the rest of this License.

  9. If the distribution and/or use of the Program is restricted in
     certain countries either by patents or by copyrighted interfaces,
     the original copyright holder who places the Program under this
     License may add an explicit geographical distribution limitation
     excluding those countries, so that distribution is permitted only
     in or among countries not thus excluded.  In such case, this
     License incorporates the limitation as if written in the body of
     this License.

 10. The Free Software Foundation may publish revised and/or new
     versions of the General Public License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.

     Each version is given a distinguishing version number.  If the
     Program specifies a version number of this License which applies to
     it and "any later version", you have the option of following the
     terms and conditions either of that version or of any later version
     published by the Free Software Foundation.  If the Program does not
     specify a version number of this License, you may choose any
     version ever published by the Free Software Foundation.

 11. If you wish to incorporate parts of the Program into other free
     programs whose distribution conditions are different, write to the
     author to ask for permission.  For software which is copyrighted by
     the Free Software Foundation, write to the Free Software
     Foundation; we sometimes make exceptions for this.  Our decision
     will be guided by the two goals of preserving the free status of
     all derivatives of our free software and of promoting the sharing
     and reuse of software generally.

                                 NO WARRANTY

 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
     AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
     OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
     PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
     DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
     OR CORRECTION.

 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
     OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
     OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

                      END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs
=============================================

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

     ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES.
     Copyright (C) 19YY  NAME OF AUTHOR

     This program is free software; you can redistribute it and/or
     modify it under the terms of the GNU General Public License
     as published by the Free Software Foundation; either version 2
     of the License, or (at your option) any later version.

     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

     Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
     type `show w'.  This is free software, and you are welcome
     to redistribute it under certain conditions; type `show c'
     for details.

The hypothetical commands `show w' and `show c' should show the
appropriate parts of the General Public License.  Of course, the
commands you use may be called something other than `show w' and `show
c'; they could even be mouse-clicks or menu items--whatever suits your
program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

     Yoyodyne, Inc., hereby disclaims all copyright
     interest in the program `Gnomovision'
     (which makes passes at compilers) written
     by James Hacker.

     SIGNATURE OF TY COON, 1 April 1989
     Ty Coon, President of Vice

This General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications
with the library.  If this is what you want to do, use the GNU Library
General Public License instead of this License.

概要
****

SKKはNemacs, MuleおよびDemacsの上に高速で効率的な日本語入力環境を提供する
システムであり、GNU General Public Licenseに従ったフリー・ソフトウェアとし
て配布される。

SKKは、Simple Kana to Kanji conversion programにちなんで名付けられた。
SKKは、いわゆるローマ字入力による、文法的知識を用いない高速変換可能な日本
語入力/変換プログラムである。本体部分のプログラムは、Emacs Lispにより書か
れており、拡張性が高い。主な特徴は、下記の通りである。

   * 変換の単位を小さくおさえることにより、文法的知識を用いないで高速に、
     かつ効率的にかな漢字変換を行なう。変換単位は通常1単語であり、変換のア
     ルゴリズムが文法的な知識を用いないので、古語、現代語、方言、文語、口
     語等、いずれについても同様に効率的な変換ができる。

   * 変換し選択された候補の単語をどんどん 「個人辞書」 (1) に取り込むドラ
     スティックな方法を取っており、個人で使用頻度の高い候補順に優先的に変
     換されるので、変換の際のヒット率が非常に高い。

   * 独立した辞書登録モードを持たず独立した登録手続きが不要で、品詞の指定
     など文法的知識を必要としない。

   * 登録時に辞書にない単語の変換を行なった場合には再帰的な辞書登録モード
     に入るなど、単語登録の手間が大幅に簡略化されている。

   * Emacsにおけるマイナーモードの変形としてインプリメントされており、SKKを起
     動しても日本語の入力が可能となる他は、オリジナルのメジャーモード にほと
     んど影響を与えず、Emacsとの親和性が高い。
     See メジャーモード (emacs).
     マイナーモード (emacs).

   * サーバープログラムを使用することにより、Emacs本体のメモリ使用の軽減を
     計れるが、サーバーが仮にダウンしてもSKKの使用を継続することが可能
     (Emacsのバッファに辞書を取り込むので、メモリは圧迫するが、高速に辞書
     アクセスが可能)。

   * 変換候補としてEmacs Lispで書かれたプログラムを指定することが可能。

   * ローマ字入力を主体とするが、木構造を使ったキー入力指定が可能で、
     T-Code風の入力も可能である。

   * インクリメンタルサーチ用のプログラムを独自に持っており、日本語のサー
     チの際に特別の操作を要しない。

SKKは、複数のプログラムより構成される。プログラムの構成と主な作者は下記の
通り。

本体部分及び拡張機能を提供するEmacs Lispプログラム
     大部分のコードは、佐藤雅彦 <masahiko@kuis.kyoto-u.ac.jp>により作
     成され、多くのボランティアにより拡張された。

     Emacs 19 baseのMule用のインクリメンタル・サーチプログラムは、榎並嗣智氏
     <enami@ptgd.sony.co.jp>により作成された。

     逆引プログラムのKAKASIインターフェイスは、中島幹夫
     <gy2m-nkjm@asahi-net.or.jp>が作成した。

     また、Emacs Lispで書かれた部分の内部処理のために、Elib (2) の中のいく
     つかのプログラムを利用している。

辞書サーバ用のCプログラム
     亀山幸義 <kameyama@kuis.kyoto-u.ac.jp> により作成された。

辞書
     その第1版が東北大学電気通信研究所佐藤研究室の 安藤大、猪岡美紀、奥川
     淳一、佐々木昭彦、佐藤克志、山岸信寛の各氏により作成され、その後、多
     数のユーザから提供された辞書をもとに拡張された。

ユーティリティプログラム
     増井俊之氏<masui@csl.sony.co.jp>、前田憲男氏および高橋裕信氏
     <takahasi@tiny.or.jp> により作成された。

--------- Footnotes ---------

(1)  個人の変換内容を逐次記録している辞書。詳細は、see 個人辞書.
info)What is Elib?.

インストール
************

`Makefile'の編集とインストール
==============================

Emacsバージョン19にて使用する場合は、以下を実行する。その際、`Makefile' 必
要に応じてを修正する。

     % ./configure
     % make
     % make install

`make' により、Emacs Lispプログラムがバイトコンパイルされる。Emacsバージョ
ン18にて使用する場合には、lisp ディレクトリに移って`make -f Makefile.18'
を実行することにより、Emacsバージョン18用のEmacs Lispプログラムがコンパイ
ルされる。バージョン9のSKKでは、マクロを多用している関係から、ファイル間に
依存関係が存在するので、必ず添付の `Makefile'、`Makefile.18' を使用して
`make' すること。

`make install' により、Emacs Lispプログラム、辞書、infoドキュメント、チュー
トリアルデーターがそれぞれ指定のディレクトリにインストールされる。

なお、このSKKディストリビューションでは、予めinfoファイルを作ってあるので、
改めて作る必要はない。なお、ご自身でフォーマットし直したい場合は、Emacsに
読み込んで `M-x texinfo-format-buffer' することで作成できる。Texinfoソース
(このドキュメントの自身のソース)は、御覧の通り日本語で標記されており、
texinfoパッケージが日本語化されていないことから、現状ではinfoファイルを作
る方法は他にない。

`.emacs' の設定
===============

`.emacs' (1) に以下のフォームを挿入する。

     (global-set-key "\C-x\C-j" 'skk-mode)
     (global-set-key "\C-xj" 'skk-auto-fill-mode)
     (global-set-key "\C-xt" 'skk-tutorial)
     (autoload 'skk-mode "skk" nil t)
     (autoload 'skk-auto-fill-mode "skk" nil t)
     (autoload 'skk-tutorial "skk-tut" nil t)
     (autoload 'skk-isearch-mode-setup "skk-isearch" nil t)
     (autoload 'skk-isearch-mode-cleanup "skk-isearch" nil t)
     (add-hook 'isearch-mode-hook
               (function (lambda ()
                           (and (boundp 'skk-mode) skk-mode
                                (skk-isearch-mode-setup) ))))
     (add-hook 'isearch-mode-end-hook
               (function (lambda ()
                           (and (boundp 'skk-mode) skk-mode
                                (skk-isearch-mode-cleanup)
                                (skk-set-cursor-color-properly) ))))

上記の設定では、SKKが起動されているときのみ、付属のインクリメンタルサーチ
を使用する。常に付属のインクリメンタルサーチを使用したかったら上記の
`isearch-mode-hook'、`isearch-mode-end-hook' の設定を下記の設定に変更する。

     (add-hook 'isearch-mode-hook 'skk-isearch-mode-setup)
     (add-hook 'isearch-mode-end-hook 'skk-isearch-mode-cleanup)

また、Emacs バージョン18では、上記の `add-hook' を使ったフォームは、いずれ
も挿入せず、代りに下記のフォームを挿入する。

     (global-set-key "\C-s" 'skk-isearch-foreward)
     (global-set-key "\C-r" 'skk-isearch-backward)

サーバーを使わない場合は、更に辞書ファイルを指定する必要がある。

     (setq skk-large-jisyo "/your/path/to/SKK-JISYO.L")

`skk-large-jisyo' はEmacsのバッファに取り込んで使用するので、これによりメ
モリが圧迫されすぎる場合は、上記の `SKK-JISYO.L' を`SKK-JISYO.S' や
`SKK-JISYO.M' に変更する。

Emacsでは本来 `C-x j' と `C-x J' はコマンド `register-to-point' に、また
`C-j' は、各メジャーモードにより `newline-and-indent'、
`eval-print-last-sexp'、`picture-duplicate-line' などの各コマンドに割り付
けられている。SKKでは `C-x j' を `skk-auto-fill-mode' に、`C-j' を
`skk-kakutei' に使用するのが標準的な設定となっているので、これらのキーに元々
バインドされていたEmacsのオリジナルコマンドを `C-x J' や `C-J' などの大文
字キーに退避するか、逆にそれらのオリジナルコマンドを元の設定のまま残して、
SKKの標準設定を変更するかどうかをユーザー側にて検討する必要がある。Emacsの
オリジナルコマンドの退避などを、将来のバージョンのSKKにおいて自動化を検討
する予定である。See 拡張アイディア.

--------- Footnotes ---------

(1)  OSがMSDOSの場合は `_emacs' である。

サーバーのインストール
======================

サーバーを使用する場合は、本節に従いインストールを行なう必要がある。

サーバーの概略
--------------

skkservは、SKKのための辞書サーバである。skkserv(サーバ)は、SKK/Emacs(クラ
イアント)とは独立に動作する。一つのサーバは、複数のクライアントの要求を処
理することができる。

サーバは、起動されると最初にSKK形式の辞書を読みこむ。次に、無限ループに入
り、クライアントからの要求を待つ。サーバは、接続を要求したクライアントごと
に通信路を作り、以後、そのクライアントから文字列変換の要求が起きる毎に辞書
を検索して変換文字列を返す。クライアントは、文字列変換要求以外に、サーバの
バージョン番号要求や接続終了などのメッセージをサーバに送る。

サーバとクライアントの間の通信には、BSD系UNIXのソケットを利用する。
System V系UNIXでもBSD系のネットワーク機能を取りこんでいるものは動作するこ
とがある。詳しくは `skkserv/Makefile' の記述を参照のこと。`skkserv'のテス
トは、SunOS 4.0.3, 4.1.1、NEWS OS 4.1.1、Ultrix V4.1、 System V release
4.0 の上で行った。また、ユーザのレポートによると、インストール時に適切な設
定をすることにより、HP-UX、MassComp、386BSD、FreeBSD、Linuxなどの上でも動
作することがわかっている。

サーバとクライアントは、ネットワークで接続された異なる計算機上で動かすこと
ができる。

共通の設定
----------

サーバーを使用する場合には、`.emacs' や `.skk' を使って
`skk-server-host'、`skk-server-prog' 及び`skk-server-jisyo' の設定を行なわ
なければならない。

`skk-server-host'
     辞書サーバーを走らせるホスト名。

`skk-server-prog'
     辞書サーバープログラム(フルパスで指定する)。

`skk-server-jisyo'
     サーバーに渡す辞書(フルパスで指定する)。

`hogehoge' ホストの、
`/usr/local/libexec/emacs' に辞書サーバープログラムを、
`/usr/local/share/emacs/site-etc' に置くのであれば、

     (setq skk-server-host "hogehoge")
     (setq skk-server-prog "/usr/local/libexec/emacs/skkserv")
     (setq skk-server-jisyo "/usr/local/share/emacs/site-etc/SKK-JISYO.L")

のように指定する。また、上記の設定は、環境変数を利用して下記のように設定す
ることで代えることができる。

Bシェルの場合
          export SKKSERVER=hogehoge
          export SKKSERV=/usr/local/libexec/emacs/skkserv
          export SKK_JISYO=/usr/local/share/emacs/site-etc/SKK-JISYO.L

Cシェルの場合
          setenv SKKSERVER hogehoge
          setenv SKKSERV /usr/local/libexec/emacs/skkserv
          setenv SKK_JISYO /usr/local/share/emacs/site-etc/SKK-JISYO.L

なお、既に `skkserv' が立ち上がっている場合は、上記の`skk-server-host'、
`skk-server-prog'、`skk-server-jisyo'あるいはそれらの環境変数はいずれも参
照されないが、`skkserv' が立ち上がっていないときは、これらの変数を参照して
`skkserv' を立ち上げようとするので、安全のためにこれらの変数を設定しておく
方が良い。

スーパーユーザの権限を持つ人の場合
----------------------------------

まず、`skkserv/Makefile' を編集する。自分の計算機の状況に応じて、以下の変
数の値を変更する。

SERVERDIR
     `skkserv'がインストールされるディレクトリであり、通常
     $EMACS/ETC にする。Emacs 19.29以上のバージョンでは、`wakeup'
     など、かつて $EMACS/ETC に置かれていたプログラムは、
     `/usr/local/libexec/emacs/19.33/i586-pc-linux-gnu/' のような
     libexecディレクトリに配置されるようになったので、SERVERDIR もこち
     らを指定するのが良いであろう。

JISYODIR
     辞書がインストールされるディレクトリであり、通常 $EMACS/ETCにする。

JISYO
     SKK辞書の名前であり、通常 `SKK-JISYO.L' とする。

次に `skkserv' をコンパイルする。

     % make

最後にスーパーユーザになり、`skkserv' をインストールする。

     % su
     Password: XXXXXXXX
     # make install

次に`/etc/services' に以下の行を追加する。

     skkserv         1178/tcp

また、`/etc/rc.local' に以下の行を追加する。

     if [ -x /your/path/to/skkserv ]; then
             /your/path/to/skkserv /your/path/to/SKK-JISYO.L
     fi

NIS(旧名YP)を使っている場合は、更にNISのマスタサーバとなっている計算機でスー
パーユーザになり、`/etc/services' に

     skkserv               1178/tcp        skk-jisyo-server

という行を加えた後、

     # cd /var/yp (または cd /etc/yp)
     # make services

とする。

スーパーユーザの権限を持たない人の場合
--------------------------------------

まず、`skkserv/Makefile' を編集する。

SERVERDIR
     `skkserv' の置き場所である。任意のディレクトリを設定する。

`Makefile' の後の項目については、
see スーパーユーザの権限を持つ人の場合 を参照のこと。

次に、`skkserv' を作り、インストールする。

     % make
     % make install

`~/.emacs' や `~/.skk' に

     (setq skk-server-portnum 1178)

を追加する (1) 。

SKKを使う前に `skkserv' を動かす計算機の上で、自分で

     % skkserv /your/path/to/SKK-JISYO.L

としてサーバーを起動する。これは、サーバーがSKK呼出し時に自動的に起動され
るようになっているのだが、必ずしも成功しないためである。`SKK-JISYO.L' をフ
ルパスで指定する代りに環境変数 SKK_JISYO を利用することもできる。See 共 通の設定.

--------- Footnotes ---------

(1)  この変数は、バージョン8までは、`skk-portnum' という名前だったので注意すること。

基本的な使用方法
****************

基本的な使用方法をまとめた本章を読むことで、とりあえずSKKを使ってみるには
困らないはずである。SKKの変換方法に慣れるには、付属のチュートリアルプログ
ラムが最適なので、お試しいただきたい。

なお、次章の「便利な応用機能とユーザーオプション」は、興味のある個所のみを
ピックアップしてお読みになれば良いと思う。

起動と終了
==========

SKKを起動するには `C-x C-j'、もしくは `C-x j' とタイプする。起動すると、モー
ドラインの左端が`--かな'となるので、これで確認できる。また、カーソルの色が
reverseVideoがoffのときはcoral4に、onのときはpinkになる (1) 。

起動時にタイプした `C-x C-j'、もしくは `C-x j' を再度タイプすることで、
SKKを終了しオリジナルのモードに戻る。カーソル色はreverseVideoがoffのときは
blackに、onのときはwhileに戻る。但し、変換を行なわないモードである「アスキー
モード」では `C-j' のキーバインドがSKK用に変更されている以外は、SKKを起動
する前のオリジナルのモードと変わりがないので、SKKを終了する必要はほとんど
ない。See アスキーモード.

`C-x j' とタイプすれば、オートフィルモード (2) をオンにし、かつSKKを起動す
る。既にオートフィルモードがオンになっているバッファで `C-x j' をタイプす
ると、SKKは起動されるが、オートフィルモードはオフになるので注意すること。
バッファの状態にかかわらず強制的にオートフィルモード付でSKKモードを起動し
たい場合は、`M-1 C-x j' や `C-u C-x j' などとタイプし、このコマンドに正の
引数を渡す (3) 。オートフィルモードをオフにし、かつSKKモードも終了したい場
合には`M-- C-x j' や `C-u -1 C-x j' などとタイプし、このコマンドに負の引数
を渡す。

`C-x C-c' でEmacsを終了しようとすると `skk-jisyo' に個人辞書の内容を自動的
に保存する。See 個人辞書.  `skk-backup-jisyo' に保存を行なう
前の辞書が退避される。個人辞書を保存せずEmacsを終了させたい場合には、

     `M-x skk-kill-emacs-without-saving-jisyo'

とタイプする。個人辞書の保存動作について更に詳しくは、
see 個人辞書の保存動作 を参照のこと。

--------- Footnotes ---------

(1) カラーディスプレイを使用し、カラー表示をサポートしているWindow
System下で対応するEmacsを使用している場合。Emacs 18にはカーソル色の変更機
能はない。

(2) See Auto Fill (emacs).

(3) 「引数」については、*Note Arguments: (emacs)Numeric Arguments を参照のこと。

モード
======

SKKが起動されている状態を「SKKモード」という。SKKモードは、いわゆるマイナー
モードの変形 (1) としてインプリメントされており、他のメジャーモードやマイ
ナーモードの動作に可能な限り影響を与えないように設計されている (2) 。SKKモー
ドは、更に文字種類による4種類の「入力モード」と、変換状態によ

り3つの「変換モード」を持つ。本章では、入力モードと変換モードについ
て説明する。
See マイナーモード (emacs).

--------- Footnotes ---------

(1) 何故「変形」なのかと言うと、SKK用のキーマッピングにEmacs19で装備された
`minor-mode-map-alist' を利用していないため。

(2) `self-insert-command' をそのメジャーモード独自のコマンドに割り付
けるようなモード、もしくは、該当のキーマップが `suppress-keymap' され
ており、多くのキーが `undefined' に割り付けられるようなメジャーモード
では、SKKモードの起動により受ける影響は大きくならざるを得ない。「可能な限
り」と断わりを入れたのはこのためである。

入力モード
----------

入力モードは、文字種別により下記の4種類に分類される。

「かなモード」
     英小文字で入力されたローマ字をひらがなに変換するモード。モードラインの最
     左部分は、`--かな'となる。カーソルの色がreverseVideoがoffのとき
     はcoral4に、onのときはpinkになる。

「カナモード」
     英小文字で入力されたローマ字をカタカナに変換するモード。モードラインの最
     左部分は、`--カナ'となる。カーソルの色がreverseVideoがoffのとき
     はforestgreenに、onのときはgreenになる。

「全英モード」
     英小文字、英大文字を全角アルファベットに変換するモード。モードラインの最
     左部分は、`--全英'となる。カーソルの色がgoldになる(reverseVideo
     のoff/onともに同一色)。

「アスキーモード」
     変換を行なわないモード。入力されたキーは `C-j' を除いて通常のEmacsの
     コマンドとして解釈される。モードラインの最左部分は、`--SKK'とな
     る。カーソルの色がreverseVideoがoffのときはivory4に、onのときはgrayにな
     る。

入力モードに伴なうカーソル色の変更方法については、
see 入力モードを示すカーソル色に関する設定 を参照のこと。

各入力モードの変更を行なうキーは下記の通り。

`q'
     「かなモード」、「カナモード」間をトグルする。

`l'
     「かなモード」または「カナモード」から「アスキーモード」へ。

`L'
     「かなモード」または「カナモード」から「全英モード」へ。

`C-j'
     「アスキーモード」または「全英モード」から「かなモード」へ。

実際にはカナモードや全英モードで長時間入力を続けることはほとんどないの
で、かなモードのままでカナ文字や全英文字を入力する便法が用意されている。
See 入力モードの一時変更.

変換モード
----------

変換モードは、次の3種類のいずれかである。

「確定入力モード(■モード)」
     漢字変換は行われないが、入力モードに応じて、ローマ字からひらがな、ロー
     マ字からカタカナ、あるいはアスキー文字から全角アルファベットへの文字
     変換を行なうモード。

「▽モード」
     漢字変換の対象となる文字列を入力するモード。

「▼モード」
     ▽モードで漢字変換の対象となる文字列を確定した後、その文字列の変換を
     行うモード。

また、▽モードの変種として "SKK abbrev mode" があり、▼モードのサブモード
として、「辞書登録モード」がある。

■モード
........

確定入力モードを「■モード」と呼ぶ。■モードでは、漢字変換は行われないが、
入力モードに応じて、ローマ字からひらがな、ローマ字からカタカナ、あるいはア
スキー文字から全角アルファベットへの文字変換を行なう。変換を行なうカレント
バッファにこのモード特有のマークは表示されない。

かなモード、カナモードで、かつ■モードである場合、入力方法はいわゆるローマ
字入力である。訓令式、ヘボン式のどちらによっても入力することができる。主な
注意点のみ以下に述べる。

   * `ん'は `n n' または `n '' で入力する。直後に `n'、`y' 以外の子音が続
     くときは `n' だけで入力できる。

   * 促音は、`c h o t t o' => `ちょっと'、`m o p p a r a'
     => `もっぱら'のように次の子音を重ねて入力する。

   * 促音や拗音(ひらがなの小文字)を単独で入力するときは、`x a'
     => `ぁ'、`x y a' => `ゃ'などのように
     `x' を用いる。

   * 長音には、`-' を用いる。`-' => `ー'。

▽モード
........

「▽モード」では、変換の対象となる文字列を入力する。かなモード、もしくはカ
ナモード (1) で、かつ、■モードであるときに 、ローマ字入力を大文字で開始す
ることで、▽モードに入る。例えば、

     `K a n j i'

     ------ Buffer: foo ------
     ▽かんじ
     ------ Buffer: foo ------

のようにタイプすることで、▽モードに入り、続けて漢字変換の対象となる文字列
を入力してゆくことができる。`▽'マークは、▽モードであるという表示であり、
また、変換開始点を示す表示でもある。

`K' の文字を大文字で入力し忘れた場合は、変換の対象としたい文字列の先頭まで
ポイント (2) を戻し `Q' をタイプすることで▽モードに入ることができる。例え
ば、下記のように行なう(-!-の地点にカーソルがある)。

     `k a n j i'

     ------ Buffer: foo ------
     かんじ-!-
     ------ Buffer: foo ------

     `C-u 3 C-b', `Q'

     ------ Buffer: foo ------
     ▽-!-かんじ
     ------ Buffer: foo ------

     `C-e'

     ------ Buffer: foo ------
     ▽かんじ-!-
     ------ Buffer: foo ------

誤って▽モードに入ってしまったときは `C-j' とタイプし、■モードに戻るか
`C-g' とタイプし▽モードで変換と対象となっている文字列を消去するかの 2 通
りの処理の方法がある。具体例を下記に示す。

     `K a n j i'

     ------ Buffer: foo ------
     ▽かんじ
     ------ Buffer: foo ------

     `C-j'

     ------ Buffer: foo ------
     かんじ
     ------ Buffer: foo ------

あるいは、

     `K a n j i'

     ------ Buffer: foo ------
     ▽かんじ
     ------ Buffer: foo ------

     `C-g'

     ------ Buffer: foo ------

     ------ Buffer: foo ------

`7がつ24にち'のように大文字から始めることができない文字列について、▽モー
ドにしたい場合は `Q' をタイプし、▽モードにしてから`7がつ24にち'の文字列を
入力する。なお、▽モードでは、文字列の間に空白を含めることはできない (3) 。

--------- Footnotes ---------

(1)  See かなモード、カナモード.

(2) See ポイント (emacs).

(3) これは、辞書の見出し語に空白を含めることができない制限からきている。

▼モード
........

「▼モード」では実際の変換作業を行なう。▽モードで変換対象とする文字列を入
力した後 SPC をタイプすることで▼モードに入る。`▽'マークから SPC をタイプ
したときのポイントまでの文字列σが変換の対象となる文字列として確定し、`▽
'マークは`▼'マークで置き換えられ、文字列σが辞書の中で検索される。仮に、
辞書に

     かんじ /漢字/幹事/

というエントリ (1) を含むとして、例を示す。

     `K a n j i'

     ------ Buffer: foo ------
     ▽かんじ-!-
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼漢字-!-
     ------ Buffer: foo ------

この例では、▽モードにおける`▽'マークからポイントまでの間の文字列`かんじ
'が変換対象の文字列σとして確定し、その文字列σについて辞書内での検索が行
なわれている。実際の変換動作では、候補部分がハイライト表示される (2) 。

`漢字'が求める語である場合は `C-j' をタイプすれば、この変換が確定し、ハイ
ライト表示も`▼'マークも消える。また `C-j' をタイプせずに、続けて新たな確
定入力を行ない、あるいは新たな変換を開始することができる。この場合、直前の
変換は自動的に確定される。これを「暗黙の確定」と呼ぶ。副作用として確定を伴
なうキーは、印字可能な文字全てと RET である。但し、see 暗黙の確定のタイ ミング
参照のこと。

求めるものが`漢字'でなければ、更に続けて SPC をタイプすることで、文字列σ
に対する次候補を検索する。

     ------ Buffer: foo ------
     ▼漢字
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼幹事
     ------ Buffer: foo ------

候補が5つ以上あるときは5番目以降の候補は7つずつまとめてエコーエリアに表示
される。例えば、辞書が

     きょ /距/巨/居/裾/嘘/拒/拠/虚/挙/許/渠/据/去/

というエントリを含むときに `K y o' の後に SPC を5回続けて打てば、

     -------------------- Echo Area --------------------
     A:嘘  S:拒  D:拠  F:虚  J:挙  K:許  L:渠  [残り 2]
     -------------------- Echo Area --------------------

がエコーエリア (3) に表示される。ここで仮に`許'を選択したければ、`k'を入力
する。`A', `S', `D', `F', `J', `K', `L' の各文字は、押し易さを考慮してキー
ボードのホームポジションから横方向に一直線に配置されているキーが選定されて
いる。また、候補の選択のために押すキーは、大文字、小文字のいずれでも良い。
候補の選択に用いるキーの変更については、see 候補の選択に用いるキー を
参照。

SPC を連打してしまい、誤って求める候補を通過してしまったときは `x' により
前候補/前候補群に戻ることができる (4) 。

候補を次々と探しても求めるものがなければ、自動的に辞書登録モードになる
(辞書登録モードは▼モードのサブモードである) 。これについては
辞書登録モード にて後述する。

次に送り仮名のある単語について説明する。`動く'を変換により求めたいときは
`U g o K u' のように、まず▽モードに入るために `U' を大文字で入力し、次に
送り仮名の開始をSKKに教えるために `K' を大文字で入力する。送り仮名の `K'
をタイプした時点で SPC をタイプすることなく、▼モードに入り変換が行なわれ
る。送り仮名の入力時、ローマ字プレフィックスが挿入された瞬間に、プレフィッ
クスの直前に `*' を一瞬挿入し、送り仮名の開始時点を明示する。プレフィック
スに続くキー入力で、かな文字が完成した時点で `*' は消える。キー入力を分解
して追いながらもう少し詳しく言うと、下記のようになる。

     `U g o'

     ------ Buffer: foo ------
     ▽うご
     ------ Buffer: foo ------

     `K'

     ------ Buffer: foo ------
     ▽うご*k
     ------ Buffer: foo ------

     `u'

     ------ Buffer: foo ------
     ▼動く
     ------ Buffer: foo ------

SKKではこのように送り仮名の開始地点をユーザーが明示的に入力するために、シ
ステム側で送り仮名を分解する必要がなく高速でヒット効率が高い変換が可能であ
る。See 送り仮名の自動処理.

但しサ変動詞の変換では、サ変動詞の語幹となる名詞を「送りなし変換」 (5) と
して変換し、その後`する'を■モードで入力した方が現状では効率が良い。
See サ変動詞の入力.

--------- Footnotes ---------

(1) 本マニュアルでは、見出し語と候補群を合わせた一行の意味で使用している。
詳細は、see 辞書の形式 を参照のこと。

(2) ハイライト表示はEmacsのOverlaysの機能を使用している。Emacs 18では
Overlaysが実装されていない。

(3) エコーエリアとミニバッファは視覚的には同一の場所にあるが、エコーエリア
が単にユーザーへのメッセージを表示するのみであるのに対し、ミニバッファは独
立のバッファとして機能する点が違う。

(4) `x' は小文字で入力する必要がある

(5) 詳細は、*Note 送りなし変換: 辞書の形式 を参照のこと。

辞書登録モード
..............

SKKは独立の辞書登録モードは持たない。辞書にない単語についての変換を行なっ
た場合に、変換の継続動作として辞書登録モードに入る。例えば辞書に

     へんかんちゅう /変換中/

のエントリがない場合に、`変換中'を得ようとして、`H e n k a n t y u u
SPC' とタイプすると、下記のように、カレントバッファは▼モードのまま `へん
かんちゅう' に対して変換ができない状態で休止し、同時にミニバッファに `へん
かんちゅう' というプロンプトが表示される。

     ------ Buffer: foo ------
     ▼へんかんちゅう
     ------ Buffer: foo ------

     ------ Minibuffer -------
     へんかんちゅう-!-
     ------ Minibuffer -------

辞書登録モードでは、入力はミニバッファに対して行われる。仮に辞書に

     へんかん /変換/
     ちゅう /中/

のようなエントリがあるとして、ミニバッファで`変換中'の文字列を`変換'と`中
'とに分けて作る。

     `H e n k a n SPC T y u u SPC'

     ------ Minibuffer -------
     へんかんちゅう 変換▼中
     ------ Minibuffer -------

ここで RET をタイプすれば `変換中' が個人辞書に登録され、辞書登録モードは
終了する (1) 。同時に変換を行なっているカレントバッファには、`変換中' が挿
入され確定される。See 個人辞書.

送り仮名のある単語の登録では、ミニバッファで作る候補に送り仮名そのものを登
録しないように注意しなければならない。仮に辞書に

     うごk /動/

というエントリがないとして、例を一つ述べる。

     `U g o K u'

     ------ Buffer: foo ------
     うごく
     ------ Buffer: foo ------

     ------ Minibuffer -------
     うご*く-!-
     ------ Minibuffer -------

ミニバッファで辞書登録すべき文字列は、`動'のみであり、送り仮名の`く'は含め
ない。`動く'を登録してしまうと、次に `U g o K u' とタイプしたときに出力さ
れる候補が`動くく'になってしまう。

     `D o u SPC'

     ------ Minibuffer -------
     うご*く 動-!-
     ------ Minibuffer -------

     RET

     ------ Buffer: foo ------
     動く
     ------ Buffer: foo ------

サ変動詞(名詞の後に`する'を付けた形で構成される動詞) については、`する'を
送り仮名とした送りあり変換 (2) を行なわず、`運動'と`する'と分けて入力した
方が効率が良い (3) 。例えば`運動する'は `U n d o u SPC s u r u' とタイプす
ることにより得られる。名詞から作られる形容詞等も同様である。

誤まって辞書登録モードに入ったときは `C-g' をタイプするか、もしくは何も登
録せず RET をタイプすると▽モードに戻る。

ミニバッファを再帰的に使い辞書登録を再帰的に行なうことができる。仮に辞書に

     さいきてき /再帰的/
     さいき /再帰/

のようなエントリがなく、かつ

     さい /再/
     き /帰/
     てき /的/

のようなエントリがあるとする。ここで `S a i k i t e k i SPC' とタイプする
と、文字列`さいきてき'に対する候補を見つけられないので、ミニバッファに`さ
いきてき'というプロンプトを表示して辞書登録モードに入る。

`さいきてき'に対する辞書エントリを作るため `S a i k i SPC' とタイプすると、
更にこの候補も見つけられないので、ミニバッファに`さいき'というプロンプトを
表示して、再帰的に`さいき'の辞書登録モードに入る。`S a i SPC K i SPC' とタ
イプすると、ミニバッファは、

     ------ Minibuffer -------
     さいき 再▼帰
     ------ Minibuffer -------

となる。ここで RET をタイプすると、個人辞書には

     さいき /再帰/

というエントリが登録され、ミニバッファは`さいきてき'の辞書登録モードに戻り、
プロンプトは`さいきてき'となる。今度は`再帰'が変換可能なので `S a i k i
SPC T e k i SPC' とタイプすると、

     ------ Minibuffer -------
     さいきてき 再帰▼的
     ------ Minibuffer -------

となる。ここで RET をタイプすることで、`さいきてき'の辞書登録モードから抜
け、個人辞書に

     さいきてき /再帰的/

というエントリが登録される。カレントバッファのポイントには、`再帰的'が挿入
される。

改行文字を含む文字列を辞書に登録するには、辞書登録モードで改行文字を
`C-q C-j' により入力する。例えば、

     〒980
     仙台市青葉区片平2-1-1
     東北大学電気通信研究所

を辞書に登録するには、辞書登録モードで、

     `〒980',
     `C-q C-j',
     `仙台市青葉区片平2-1-1',
     `C-q C-j',
     `東北大学電気通信研究所',
     RET

と入力する。

--------- Footnotes ---------

(1)  ここでも暗黙の確定が行なわれるので`C-j' をタイプする必要はない。但し、see ▼モードでのRET を参照のこと。

(2) 送り仮名を伴なう変換。詳細は、*Note 送りあり変換: 辞書の形式 を参照の
こと。

(3) 名詞とそのサ変動詞とを別々に辞書に持ったのでは空間的な効率が悪いので、
基本的に、辞書がサ変動詞を送りありとして意識した作りとしていない。従い、
`する'を送り仮名とした送りあり変換では、辞書に候補がなく辞書登録モー
ドに入ってしまう可能性が大きいので、名詞として分解して入力することを勧めて
いる。一方、このように名詞に分解して入力することで、サ変動詞になり得ない名
詞が候補として出てくることもあり(例えば`孝行する' という変換を行ない
たい場合に`高校'が出てくるなど)、候補の絞り込みという点では必ずしも効
率が良くないので、将来のバージョンにおいて改善する方向で検討を進めている。
詳細は、see 拡張アイディア を参照のこと。

インクリメンタル・サーチ
========================

SKKでは、専用のインクリメンタル・サーチプログラムをEmacs添付のisearch.el
のラッパーとして実装しており、日本語の文字列についてのインクリメンタル・
サーチ(通常の文字列も正規表現を用いたものも両方)をアスキー文字と同様の操
作で行なうことができる。しかも大部分の動作は、オリジナルのインクリメンタ
ル・サーチのもののままである。従ってオリジナルのインクリメンタル・サーチの
コマンド(`M-y' の `isearch-yank-kill' や `M-p' の
`isearch-ring-retreat', `M-n' の `isearch-ring-advance' な
ど)やユーザー変数でのカスタマイズ(`search-highlight' など)もそのま
ま利用できる。オリジナルのインクリメンタル・サーチについては、
*Note Incremental Search: (emacs)Incremental Search
を参照のこと。

インクリメンタル・サーチ中の入力方法は、通常のバッファにおける各入力モード、
変換モードでの入力方法と同一である。

`C-s' や `C-r'、あるいは `M-C-s' や `M-C-r' でインクリメンタル・サーチを起
動すると、インクリメンタル・サーチを起動したバッファの入力モードと同一の入
力モードで、キーとなる文字の入力が可能となる。入力モードに合わせて、インク
リメンタル・サーチのプロンプトが表示される。プロンプトの種類は、以下の5つ
である。

I-search: [aa]
     アスキーモード

I-search: [か]
     かなモード

I-search: [カ]
     カナモード

I-search: [英]
     全英モード

I-search: [--]
     インクリメンタル・サーチモードで `C-x C-j' などをタイプしてSKKを終了
     した場合は、このプロンプトが表示される。

便利な応用機能とユーザーオプション
**********************************

予備知識
========

以下のセクションで応用機能とユーザーオプションについて述べるが、その前に
SKKのファイル構成やユーザーオプションの設定についての一般的注意を述べる。
また、辞書の形式や設定方法についても詳述しておく。辞書の形式や設定方法を理
解することで、様々な応用機能がどう動くのかを理解する助けとなる。

ファイル構成
------------

SKKバージョン9.6では、応用機能を提供するプログラムのほとんどを `skk.el' と
は別のファイルに収め、必要に応じ、オートロードするように設計されている。各
応用機能の概略と該当のファイル名について説明する。

`skk-auto.el'
     送り仮名の自動処理を行なうプログラムを集めたファイル。
     See 送り仮名の自動処理.

`skk-comp.el'
     見出し語の補完を行なうプログラムを集めたファイル。See 見出し語の補 完.

`skk-e18.el'
     Emacs 18専用プログラムを集めたファイル。

`skk-e19.el'
     Emacs 19専用プログラムを集めたファイル。

`skk-gadget.el'
     プログラム実行変換を行なうプログラムを集めたファイル。
     See プログラム実行変換.

`skk-kakasi.el'
     KAKASIインターフェイスプログラムを集めたファイル。See リージョン一 括変換.
     See KAKASI.

`skk-kcode.el'
     漢字コードまたはメニューによる文字入力を行なうプログラムを集めたファイル。
     See 漢字コードまたはメニューによる文字入力.

`skk-num.el'
     数値変換を行なうプログラムを集めたファイル。See 数値変換.

`skk-server.el'
     SKKサーバーインターフェイスプログラムを集めたファイル。
     See サーバー関連.

`skk-tree.el'
     有限状態オートマトンを用いた変換を行なうプログラムを集めたファイル。
     See 有限状態オートマトンを用いた変換.

`skk-vip.el'
     VIPインターフェイスプログラムを集めたファイル。See VIPとの併用.

なお、Elibより `avltree.el'、`elib-node.el'、`queue-m.el'、`stack-m.el'、
`string.el' の各ファイルをピックアップしている。その内、`avltree.el' は、
オリジナルのバグと思われる個所を修正してある。また、`string.el' は、スピー
ドアップを図って少し手を入れている。いずれもオリジナルの動作とは何ら違わな
いので、SKK配布のものを使用せずに既に持っているElibを使用しても問題はない。

ユーザーオプションの設定方法
----------------------------

以前のバージョンのSKKでは、どのようなカスタマイズが行なわれている場合でも
チュートリアル使用時に標準設定に戻す目的で変数の宣言に `defconst' を使用し
ていた関係からSKKに関する全ての設定は `~/.skk' で行なう必要があったが、バー
ジョン9より `defvar' を使用した宣言を行なうようにしているので、他のEmacs
Lispパッケージ同様 `~/.emacs' で設定を行なうことができるようになった。また、
従来通り `~/.skk' が使える他、各種フックを利用することもできる。上記のファ
イルやフックを利用した設定がいつ有効になるのか、という点について下記に述べ
る。

`.emacs'
     Emacsを起動したときに一度だけ評価される。バッファに関係しないグローバル
     変数の設定やフックの設定などを行なう場合が多い。OSがMSDOSの場合は
     `_emacs' である。
     See .emacs (emacs).

`.skk'
     SKKを起動したときに一度だけロードされる。バッファに関係しないグローバ
     ル変数の設定などを行なう場合が多い。OSがMSDOSの場合は `_skk' と
     いうファイル名がディフォルトである。`~/.skk' のファイル名は
     `skk-init-file' で変更することができる。また、このファイルを自動
     的にバイトコンパイルする機能がインプリメントされている。詳細は、
     see skk-init-fileのバイトコンパイル を参照のこと。

`skk-mode-hook'
     `C-x C-j' とタイプしてSKKモードを起動するたびにコールされる。バッファ
     ローカルの設定などを行なう場合が多い。

`skk-auto-fill-mode-hook'
     `C-x j' とタイプしてSKKモードをオートフィルモード付きで起動するたびに
     コールされる。バッファローカルの設定などを行なう場合が多い。

`skk-load-hook'
     `skk.el' のロードを完了した時点でコールされる。`.skk' はSKKモードを起
     動しなければロードされないのに対し、このフックは、`skk.el' をロードし
     たらSKKモードを起動しなくともコールされる点が違う。

`skk-auto-load-hook'
`skk-comp-load-hook'
`skk-e18-load-hook'
`skk-e19-load-hook'
`skk-gadget-load-hook'
`skk-kakasi-load-hook'
`skk-kcode-load-hook'
`skk-num-load-hook'
`skk-server-load-hook'
`skk-tree-load-hook'
`skk-vip-load-hook'
     `skk-auto.el', `skk-comp.el', `skk-e18.el', `skk-e19.el',
     `skk-gadget.el', `skk-kakasi.el', `skk-kcode.el', `skk-num.el',
     `skk-server.el', `skk-tree.el', `skk-vip.el' の各ファイルがロードを完
     了した直後にコールされるフック。

skk-vip-mode-hook
     VIPを併用している場合で、`skk-mode' を起動したときにコールされるフッ
     ク。See VIPとの併用.

メニューバー (1) が使用できる環境では、SKKモード起動時にメニューバーを使っ
て、オン/オフトグルに設定できるユーザーオプションの設定が変更できる (2) 。
ここで変更した設定はEmacs終了時に保存するかどうかを確認され、保存を選択し
た場合は、その設定が `.skk' に保存される。`.emacs' より後に `.skk' がロー
ドされるので、メニューバーよりユーザーオプションの設定の変更が行なわれた場
合は、`.skk' にその設定が保存される。

--------- Footnotes ---------

(1)  See メニューバー (emacs).

(2) 例えば `skk-roma-kana-a' など、オン/オフの設定ではなく複雑なリス
トを指定しなければならないユーザーオプションについては、メニューバーからは
設定できない。これらの簡便な設定ユーザーインターフェイスについては、将来の
バージョンにて検討する。See 拡張アイディア.

辞書の形式
----------

辞書の種別は大きく分けて「共有辞書」と「個人辞書」の2つがある。

共有辞書
     付属の `SKK-JISYO.S'(「S辞書」), `SKK-JISYO.M'(「M辞書」),
     `SKK-JISYO.L'(「L辞書」) などがあり、通常は個人辞書よりもサイズが大き
     く、省資源の面からユーザー間で共有され、参照のみされる辞書で、使用中
     にSKKにより内容の変更が行なわれることはない。

個人辞書
     変数 `skk-jisyo' で指定されるファイルであり、SKKを一番最初に使い始め
     たときにホームディレクトリに自動的に作られ、その後の使用により日々刻々
     と更新されてゆく辞書である。

他には `skk-initial-search-jisyo' や `skk-kakutei-jisyo' などがあるが、こ
れらは個人毎に持つものを使用しても良いし、ユーザー間で共有しているものを使
用しても良く、共有辞書、個人辞書という区分にはいずれにも属さない。その性格
から、辞書内容の更新は行なわれず、参照のみ行なわれる。また使用目的から通常
はサイズが小さい。

個人辞書、`skk-initial-search-jisyo', `skk-kakutei-jisyo' はEmacsのバッファ
に読み込んで検索を行なう。共有辞書は設定によりEmacsのバッファに読み込んで
使用する方法と、サーバー経由で使用する方法とがある。

個人辞書の一例を挙げる。

     ;; okuri-ari entries.
     たとe /例/[え/例/]/
     もt /持/[つ/持/]/[って/持/]/[た/持/]/[て/持/]/[ち/持/]/[と/持/]/
     たすk /助/[け/助/]/
     うごk /動/[く/動/]/[か/動/]/[け/動/]/[き/動/]/[こ/動/]/
     ふくm /含/[め/含/]/[む/含/]/[ま/含/]/[み/含/]/[も/含/]/
     ...
     ;; okuri-nasi entries.
     てん /点/・/天/
     ひつよう /必要/
     さくじょ /削除/
     へんこう /変更/
     じゅんじょ /順序/
     ぐん /群/郡/
     こうほ /候補/
     いち /位置/一/壱/
     ...

`てん /点/・/天/' を例に取ると、`てん'が見出し語であり、その候補が、`点'、
`・'、`天'である。候補はそれぞれ、`/'によって区切られている。見出し語と候
補群を合わせた `てん /点/・/天/' の一行を「エントリ」と呼ぶ。

辞書はプレーンなテキストファイルで、最低限下記の2つの行を持つ。

     ;; okuri-ari entries.
     ;; okuri-nasi entries.

この2つの行は、それぞれ送り仮名あり、送り仮名なしのエントリの開始地点を示
すマークである。`;; okuri-ari entries.' までの行で `;' を行頭に持つ行はコ
メント行として無視される。`;; okuri-ari entries.'  以降にコメント行を含む
ことはできないので、注意すること。

`;; okuri-ari entries.' と `;; okuri-nasi entries.' の
間に囲まれた上半分の部分が送り仮名ありのエントリである。これを「送り
ありエントリ」と呼ぶ。`;; okuri-nasi entries.' 以下の下半分部
分が送り仮名なしのエントリである。これを「送りなしエントリ」と呼ぶ。
また送りありエントリを検索する変換を「送りあり変換」、送りなしエント
リを検索する変換を「送りなし変換」と呼ぶ。SKKでは送り仮名の有無が変
換方法の1つの種別となっているので、基本的には、送り仮名がある変換では送
りありエントリのみが検索され、送り仮名がない変換では送りなしエントリのみ
が検索される。

1つの見出し語についてのエントリは1行内に書かれる(2行以上にまたがることはで
きない)。改行を含む候補については、`(concat "改\n行")' のように、評価する
と改行を該当個所に挿入するようなLispプログラム(see プログラム実行変換)
に候補を変換して辞書に収めている。行頭から空白までの文字列が見出し語で
ある。空白以降`/' と `/' とに囲まれた文字列がそれぞれの候補である。例えば、

     じしょ /辞書/自署/

は、見出し語`じしょ'についてのエントリで、その候補は、`辞書'と`自署'の2つ
である。

送りありエントリは、基本的には`もt /持/'のようになっており、送り仮名部分は、
送り仮名をローマ字表現したときの1文字目(あるかな文字をローマ字表現したとき
の1文字目を「ローマ字プレフィックス」と呼ぶ。)で表現されている。この1エン
トリで `持た'、`持ち'、`持つ'、`持て'、`持と'の5つの候補に対応している。そ
の5つの候補の送り仮名をローマ字プレフィックスで表現すれば、いずれも `t' に
なる。

さて、個人辞書の送りありエントリには `[' と `]' に囲まれたブロックがあるが、
これは、そのブロックの先頭にある平仮名を送り仮名に取る候補群である。上記の
例で見ると、見出し語`たとe'の場合は`え'を送り仮名とする1つのブロックから構
成されており、見出し語`ふくm'の場合は、`ま'、`み'、`む'、`め'、`も'を送り
仮名とする5ブロックに分けられている。

この送り仮名毎のブロック部分は、`skk-henkan-okuri-strictly' あるい
は
 `skk-auto-okuri-process' のいずれかの変数が `non-nil' で
ある場合に、検索の際、見出し語としてはマッチしても、更に送り仮名もマッチ
するのかどうかをテストするために使用される。例えば、

     おおk /大/多/[く/多/]/[き/大/]/

というエントリがあれば、同じ見出し語`おおk'であっても送り仮名が
`き'であれば、候補は`大'のみであって`多'は無視される。
See skk-henkan-okuri-strictly.
skk-auto-okuri-process.

現在のところ、付属の共有辞書では、`[' と `]' を使用した送り仮名毎のブロッ
クの形式に対応していない。個人辞書のみがこの形式で書き込まれてゆく。
`skk-henkan-okuri-strictly' が `nil' であっても送り仮名のブロック形式で書
き込まれる。但し `skk-process-okuri-early' の値が `non-nil' であれば、送り
仮名を決定する前に変換を開始することになるので、送り仮名を明示的に入力して
いても個人辞書には `[' と `]' に囲まれた送り仮名毎のブロックは作られないの
で注意すること (1) (2) 。See skk-process-okuri-early.

共有辞書では、送りありエントリは `;; okuri-ari entries.' から順に下方向に、
見出し語をキーとして降順に配置されている。送りなしエントリは、 `;;
okuri-nasi entries.' から順に下方向に、見出し語をキーとして昇順に配置され
ている。降順、昇順に配置されているのは、辞書サイズが大きいことに配慮してバ
イナリサーチを行なうためである。なお、ソートする際には、見出し語を
unsigned-charと見なしている。この順序はEmacsが `string<' で文字列を比較す
るときの順序であり、UNIXの `sort' コマンドでの標準の順序とは異なるので注意
が必要である。Emacsのコマンド `sort-lines' を用いればファイルをこの順序で
ソートすることができる (3) 。

一方、個人辞書は上の例でも見たように、それぞれ`;; okuri-ari entries.',
`;; okuri-nasi entries.' を基点として、一番最後に変換を行なったものがそれ
ぞれのミニマムポイント (4) に挿入され辞書が更新される。個人辞書は通常は共
有辞書程はサイズが大きくないので、検索時にはそれぞれの基点からリニアサーチ
が行なわれる。個人辞書で見つけられなかった候補については共有辞書から検索さ
れ、そこで見つかり確定された場合はその候補が個人辞書に取り込まれ、次に同じ
見出し語の検索を行なった場合に同候補を最初に出力すべく、それぞれのミニマム
ポイントに挿入される。

--------- Footnotes ---------

(1)  変換開始
の直前に内部変数に送り仮名を保存するのだが、送り仮名の確定前に変換を開始す
るので、個人辞書も送り仮名対応ブロックが作られない。ただ、確定時点では送り
仮名が分っているので、確定時点で送り仮名を検索し直し、個人辞書に送り仮名対
応ブロックを作ることは可能だが、`skk-process-okuri-early' を利用する
ユーザーにとっては、それは無駄なことなのであろう。

(2) SKKバージョン8では、送り仮名毎のブロックが個人辞書内に既に作られていて
も
 `skk-process-okuri-early' を `non-nil' にして確定すると、
該当する送りありエントリの送り仮名ブロックの部分が削除されていたが、バージョ
ン9より、既に存在する送り仮名ブロックを保存されるように改良した。
`skk-process-okuri-early' を常に `non-nil' で使用するユーザーに
とってはあまり有り難い話ではないのかもしれないが、色々なユーザーオプション
を試してみようとするユーザーにとっては、`skk-process-okuri-early' を
一時期 `non-nil' にしたばっかりに個人辞書の送り仮名情報がことごとく破
壊されるのは酷であろう。ちなみにここで言う「送り仮名ブロックの保存」にかか
るコストは大したことはない。

(3) Emacsコマンドの `sort-columns' は内部的にUNIXコマンドの
`sort' を使っているので、辞書のソートには使わないこと。

(4) 正確に言えば、送りあり変換では `skk-okuri-ari-min' + 1 の位置、
送りなし変換では
 `skk-okuri-nasi-min' + 1 の位置である。